
API 인증(API authentication)이란 API에 접근하려는 주체(사용자, 서비스, 애플리케이션 등)가 누구인지 확인하는 과정입니다. 즉, "이 요청을 보낸 사람이/프로그램이 주장하는 그 사람(또는 그 애플리케이션)이 맞는가?"를 검증하여 적절한 접근을 허용하거나 거부하는 절차를 말합니다. (참고: 인증(authentication)과 인가(authorization)는 별개로, 인증은 신원 확인, 인가는 그 신원이 어떤 자원에 어떤 작업을 할 수 있는지 결정합니다.) 주요 개념 및 구성 요소 - 신원 증명(credential): API 키, 사용자 이름/비밀번호, 토큰, 클라이언트 인증서 등 인증을 위해 제공되는 정보. - 토큰: 일단 인증이 성공하면 발급되는 액세스 토큰(JWT 등). 토큰에 사용자 정보, 권한(스코프), 만료시각 등이 포함될 수 있음. - 토큰 수명 및 갱신: 액세스 토큰은 보안상 짧은 수명을 갖고, 리프레시 토큰으로 갱신할 수 있음. 토큰 폐기(리보크)도 중요. - 검증: 서버는 토큰의 서명, 발행자(issuer), 대상(audience), 만료(exp) 등을 검증해야 함. 일반적인 인증 방식 - API Key: 고정된 문자열을 헤더(x-api-key)나 쿼리로 전송. 간단하지만 유출되기 쉬움, 권한 제어가 제한적. - HTTP Basic Auth: 사용자명/비밀번호를 Base64로 인코딩해 전송. HTTPS와 함께 사용해야 함. - OAuth 2.0: 표준화된 권한 부여/인증 프레임워크. 흔한 플로우: - Authorization Code (웹/모바일 사용자 로그인, PKCE 권장) - Client Credentials (서버 대 서버) - Refresh Token (짧은 액세스토큰 갱신) - OpenID Connect: OAuth 2.0 위에서 동작하는 사용자 인증(ID 토큰 제공). - JWT(JSON Web Token): 서명된 토큰 형식으로 자주 사용. 자체적으로 클레임을 담고 있어 검증 시 사용자 및 권한 확인 가능. - HMAC 서명: 요청 본문/헤더를 비밀키로 해시하여 전송(예: AWS Signature). 요청 위변조 방지에 강함. - Mutual TLS(mTLS): 클라이언트와 서버가 서로 인증서로 신원을 확인. 높은 보안 요구 환경에서 사용. 안전한 구현 모범 사례 - 항상 HTTPS 사용: 전송 중 탈취 방지. - 최소 권한 원칙(least privilege): 토큰/키에 필요한 최소 권한만 부여. - 짧은 수명 토큰 + 리프레시 토큰 사용: 노출 리스크 감소. - 비밀값 안전 저장: 환경변수, 시크릿 매니저, HSM 등. 코드나 리포지토리에 하드코딩 금지. - 토큰 검증 철저: 서명, issuer, audience, 만료시간 확인. - 키/토큰 주기적 로테이션: 유출 대비. - 공개 클라이언트에 PKCE 사용: 모바일/SPA에서 토큰 탈취 방지. - 요청 서명(HMAC)이나 mTLS로 무결성/상호 인증 강화 가능. - 로깅·모니터링·리보크: 이상 징후 감지, 토큰 폐기 기능 제공. - 속도 제한(rate limiting)과 동시 접속 제한으로 남용 방지. 간단한 예시(헤더 사용) - API Key: Authorization: ApiKey
또는 x-api-key: - Bearer 토큰(JWT): Authorization: Bearer 결론적으로 API 인증은 API 제공자가 요청자의 신원을 신뢰할 수 있게 확인하는 핵심 보안 단계이며, 적절한 인증 방식과 엄격한 검증·운영 정책을 결합해야 안전한 API 접근 제어를 달성할 수 있습니다.